#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

// 全局变量存储主线程ID
pthread_t main_thread_id;

//子线程函数：
void *routine(void *arg)
{    
    void *main_ret;
    //子线程接合主线程
    pthread_join(main_thread_id,&main_ret);

    printf("启动子线程\n");
    //输出主线程的退出值
    printf("主线程的退出值为:%d\n",*(int *)main_ret);

    free(main_ret);
    return NULL;
}


int main(void)
{   

    //获取主线程的id
    main_thread_id = pthread_self();
    
    //初始化属性变量,添加分离属性
    pthread_attr_t attr;
    pthread_attr_init(&attr);

     // PTHREAD_CREATE_JOINABLE: 接合 PTHREAD_CREATE_DETACHED： 分离
	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

    //创建线程
    pthread_t tid;
    pthread_create(&tid, &attr, routine, NULL);

     // 主线程准备退出值（动态分配内存，避免栈内存随主线程退出而释放）
    int *exit_value = malloc(sizeof(int));
    *exit_value = 88;  // 主线程要传递的退出值
    
    printf("主线程结束,退出值为%d\n",*exit_value);

    pthread_exit(exit_value);
}